8.2.3 -
Serveur Hercule :
8.2.3.A - Concentrateur IPSEC :
Le serveur Hercule est destiné à pouvoir établir des
tunnels IPSEC entre un client distant et les DMZ au travers d’Internet.
Installer cette fonctionnalité passe par une mise à jour et une
recompilation du noyau Linux mis à jour à l’aide du patch
FreeSwan.
L’installation IPSEC passe par les manipulations
suivantes :
è Installation du package « initrd-tools » (obligatoire pour un noyau 2.4)
è Installation des sources Linux :
apt-get install kernel-source-2.4.18
è Installation du patch FreeSwan :
apt-get install kernel-patch-freeswan
è cd /usr/src
è Décompilation des sources Linux :
tar –xzf kernel-source-2.4.18.tar.bz2
è cd kernel-source-2.4.18
è ../kernel-patches/all/apply/Freeswan
è export PATCH_THE_KERNEL=auto
è Compilation du noyau Linux :
make-kpkg –added-patches=Freeswan –append-to-version=-1-Freeswan-sga –revision=hercule.1 –config=menuconfig configure
make-kpkg clean
make-kpkg –initrd –revision=hercule.1 kernel-image
NB : La configuration en cours d’un serveur Linux est toujours stockée dans un fichier /boot/configxxxxx. Ce fichier au format texte contient toutes les options utilisées pour la compilation du noyau en cours !
8.2.3.A.1 - Installation du noyau
généré :
Le noyau généré par les opérations
décrites ci-dessus se trouve dans le répertoire
« /usr/src ». Pour installer ce noyau il faut effectuer les
opérations suivantes :
è modification du fichier « /etc/lilo.conf ». Le fichier du serveur Hercule est donné ci-dessous :
#
# Emplacement : Maquette de test SGA
# Description : Fichier de configuration du chargeur de demarrage lilo
# : Voir man lilo et man lilo.conf pour tous les details
# : NE PAS OUBLIER DE LANCER LA COMMANDE LILO APRES TOUTE
# : MODIFICATION DE CE FICHIER !!!
# Serveur : Hercule
# Copyright : marc.boget@gendarmerie.org
# Support du mode LBA pour les disques de grande capacité
#
lba32
# Specification du disque de demarrage : cela peut etre soit un disque
# soit un partition : dans le cas d'un disque cela signifie que lilo doit
# ecrire dans le MBR
boot=/dev/sda
# Definition de la partition à monter comme "/"
root=/dev/sda5
# Definition du fichier a installer comme nouveau secteur de boot
install=/boot/boot-menu.b
# Definition de la table de caracteres a utiliser au demarrage
map=/boot/map
# Definition du mot de passe allant de pair avec l'option restricted
# Ce mot de passe est exigé des que la configuration de boot souhaitée
# n'est pas celle par defaut. Cela permet d'eviter qu'un pirate puisse
# bypasser la sequence de boot normal
password=sga
# Definition du temps d'attente avant demarrage de la config par defaut
delay=20
prompt
timeout=150
# Definition du mode graphique au demarrage de lilo
vga=normal
# Nom de l'image de boot par defaut
default=Linux-Freeswan
# Definition des images de boot disponibles
image=/vmlinuz.freeswan
label=Linux-Freeswan
read-only
initrd=/initrd.img
restricted
alias=1
image=/vmlinuz
label=Linux
read-only
initrd=/initrd.img
restricted
alias=2
image=/vmlinuz.old
label=Linux-bf24
read-only
restricted
alias=3
# Definition d'une partition de boot de type autre
other=/dev/sda1
label="Part. Compaq"
è installation du package généré à l’aide de la commande « dpkg –i /usr/src/kernel-image-2.4.18-hercule.1
8.2.3.A.2 - Mise en place des tunnels
IPSEC :
Un tunnel IPSEC se traduit par l’utilisation de deux certificats. Les
manipulations décrites paragraphe
8.2.1 -
doivent être mises en œuvre pour la génération
d’un certificat IPSEC destiné au concentrateur FreeSwan ainsi que
d’un certificat IPSEC par client devant se connecter sur le
concentrateur.
Le fichier de configuration du serveur FreeSwan est le fichier
« /etc/ipsec.conf ». Le fonctionnement de FreeSwan est
d’indiquer ce qu’il doit considérer comme étant
à « gauche » de lui et ce qu’il doit
considérer comme étant à droite de lui. La notion de gauche
et de droite n’a aucune signification particulière, la seule
contrainte étant que les informations doivent être cohérente
entre ce que le concentrateur FreeSwan considère comme étant
à gauche ou à droite et ce que le client IPSEC considère
lui comme étant la gauche et la droite !!!.
Le fichier de
configuration de FreeSwan du serveur Hercule est relativement explicite et est
donné ci-dessous :
#
# Emplacement : Maquette de test SGA
# Description : Fichier de configuration du concentrateur FreeSwan
# : Voir /usr/share/doc/freeswan/doc/index.htmlpour tous les details
# Serveur : Hercule
# Copyright : marc.boget@gendarmerie.org
#
# Paramétrage par defaut du concentrateur FreeSwan
config setup
# defaultroute correspond à la route correspondante au paquet
# c'est a dire celle trouvée en appliquant les regles classiques
# du routage IP
#interfaces=%defaultroute
# On peut aussi définir specifiquement l'interfaces qui fait
# de l'IPSEC
interfaces="ipsec0=eth1"
# Controle du mode debug : bon courage !!!
klipsdebug=none
plutodebug=none
# Permet de definir si la connexion definie est automatiquement
# activée au demarrage au juste chargée
# Use auto= parameters in conn descriptions to control startup actions.
plutoload=%search
plutostart=%search
#plutoload="sga"
#plutostart="sga"
# Option permettant de fermer les vieilles connections quand une nelle
# portant le meme ID se pointe : cela permet de retomber sur ces pieds
# en cas d'arret brutal de la connexion
uniqueids=yes
# Paramétrage par defaut des connexions
conn %default
keyingtries=1
compress=yes
disablearrivalcheck=no
# Definition du réseau des clients
conn sga2-net
leftsubnet=192.168.0.0/24
also=sga2
# Definition de la connexion IPSEC
conn sga2
authby=rsasig
leftrsasigkey=%cert
left=%any
rightrsasigkey=%cert
right=192.168.0.1
rightsubnet=10.1.4.0/24
rightcert=/etc/ipsec.d/hercule.pem
pfs=yes
auto=add
# Des exemples en vrac ...
# connection description for (experimental!) opportunistic encryption
# (requires KEY record in your DNS reverse map; see doc/opportunism.howto)
#conn me-to-anyone
# left=%defaultroute
# right=%opportunistic
# keylife=1h
# rekey=no
# # uncomment this next line to enable it
# #auto=route
# sample VPN connection
#conn sample
# # Left security gateway, subnet behind it, next hop toward right.
# left=%any
# leftsubnet=192.168.0.0/24
# #leftnexthop=10.22.33.44
# # Right security gateway, subnet behind it, next hop toward left.
# right=10.12.12.1
# rightsubnet=192.168.0.0/24
# rightnexthop=10.101.102.103
# # To authorize this connection, but not actually start it, at startup,
# # uncomment this.
# #auto=add
#conn sga
# # Left security gateway, subnet behind it, next hop toward right.
# left=%any
# #leftsubnet=192.168.0.0/24
# #leftnexthop=10.22.33.44
# # Right security gateway, subnet behind it, next hop toward left.
# right=192.168.0.1
# rightsubnet=10.1.4.0/24
# rightnexthop=10.1.4.5
# # To authorize this connection, but not actually start it, at startup,
# # uncomment this.
# auto=add
#leftid="C=FR, ST=France, L=MALAKOFF, O=SGA, OU=Maquette de test, CN=cassiopee7"
#rightid="E=root@sga.def, C=FR, ST=FRANCE, L=MALAKOFF, O=SGA, OU=Maquette de test, CN=Hercule"
NB : le fichier /etc/ipsec.d/hercule.pem doit être enregistré au format PEM (cf. paragraphe 8.2.1.B - ). La clé correspondante « hercule.key » est situé dans le répertoire défini dans le fichier « /etc/ipsec.secrets » dont un exemple est donné ci-dessous :
: RSA /etc/ipsec.d/private/hercule.key
Le caractère « : » permet éventuellement de specifier quelle connexion doit utiliser cette clé secrète ...
8.2.3.A.3 - Installation des clients IPSEC
Windows :
L’installation des clients IPSEC sous Windows 2000 s’effectue
en deux temps :
- installation du certificat IPSEC,
- paramétrage de la stratégie IP de Windows 2000.
8.2.3.A.3.a - Installation du certificat
IPSEC :
De manière à installer le certificat IPSEC il
faut :
è générer le certificat (cf. paragraphe 8.2.1 - ) ;
è lancer la MMC (Microsoft Management Console) sur le poste client IPSEC ;
è choisir dans le menu « Console » l’option « Ajouter/Supprimer un composant logiciel enfichable » ;
è cliquer sur « Ajouter » et choisir « Certificats » puis « le compte de l’ordinateur »
è cliquer sur « Personnel » puis « Certificats » puis faire « Actions - Toutes les taches – Importer » et importer le certificat client. En effet le certificat IPSEC doit être attaché à l’ordinateur et non à l’utilisateur ce qui se passe immanquablement lorsque l’on double clique sur le fichier .PFX !!!
8.2.3.A.3.b - Paramétrage de la
stratégie IP :
La stratégie IP se paramètre à l’aide de la MMC
« Stratégie de sécurité locale » (Menu
Edition / Paramètres / Outils d’administration / Stratégie
de sécurité locale). L’installation des outils de Marcus
Muller (
http://vpn.ebootis.de)
permet l’adoption d’un fichier de configuration du client
ressemblant au fichier de configuration du concentrateur Freeswan. Il est
à noter que ces outils ne font que paramétrer automatiquement la
liaison (il suffit d’examiner la politique FreeSwan au travers de la MMC
pour en avoir la preuve). De manière à permettre un affichage plus
concis le contenu de ce fichier est donné ci-dessous en lieu et place des
copies d’écran de la MMC :
conn Cassiopee6
left=%any
leftsubnet=192.168.0.6/32
right=192.168.0.1
rightsubnet=10.1.4.0/24
rightca="E=ca@sga.def, C=FR, O=SGA, CN=Autorite certification test maquette SGA"
network=auto
auto=start
pfs=yes
8.2.3.A.3.c - Activation du mode DEBUG des clients
IPSEC :
Pour activer le mode debug des clients Windows IPSEC il faut effectuer les
manipulations suivantes :
è Création de la clé HKLM/System/Current Control Set/Services/PolicyAgent/OAKLEY
è Création du DWORD « EnableLogging=1 » sous OAKLEY
è net stop policyagent
è net start policyagent
Les traces de debug IPSEC sont alors activées dans le fichier \WINNT\DEbug\Oakley.log
8.2.3.B - Serveur de temps :
NTP signifie Network Time Protocol et permet a une machine cliente de
synchroniser son horloge sur un serveur de strate N lui même se
synchronisant sur un serveur de strate supérieure ou directement sur un
serveur de référence.
8.2.3.B.1 - Partie serveur :
La partie serveur du démon NTP (version 1:4.1.0-8) s’installe
à l’aide de la commande suivante :
è apt-get install ntp
L’installation
de ce démon nécessite l’installation des programmes
suivants :
- ntp-simple ou ntp-refclock,
- debconf,
- libc6 (version >= 2.2.4-4),
- libreadline4 (version >= 4.2a-4)
Le fichier de configuration
de ce démon est le fichier /etc/ntp.conf. La configuration
employée sur le serveur Hercule est la suivante :
# Emplacement : Maquette de test SGA
# Description : Fichier de configuration du démon NTP
# Serveur : Hercule
# Copyright : marc.boget@gendarmerie.org
# Dans le cas ou la directive logfile n'est pas définie, le démon NTP
# utilise syslog
logfile /var/log/ntpd
# Fichier contenant la dérive de temps ou drift
driftfile /var/lib/ntp/ntp.drift
# Fichier de stats
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# Serveurs de synchronisation
# La directive « prefer » permet d’indiquer le serveur de prédilection
server ntp.univ-lyon1.fr prefer
server ntp.obspm.fr
server ntp.tuxfamily.net
8.2.3.C - Déport des logs :
Il a été fait le choix de concentrer les logs sur la machine
« PetiteOurse ». De manière à ne pas aider un
éventuel pirate à deviner le déport de logs il a
été mis en place les mécanismes suivants :
- création d’une partition spéciale pour le
répertoire « /var/log » : en effet dans le cas
ou une attaque en déni de service par submersion des logs du firewall il
faut impérativement empêcher que la partition hébergeant le
répertoire « / » soit pleine sous peine de voir le
serveur s’écrouler ;
- maintien des logs en local sur « /var/log » ;
- installation du package « logrotate » (version
3.5.9-8) :
è apt-get install logrotate
- Ce package dépend des packages suivants :
- libc6 (version >= 2.2.4-4) ;
- libpopt0 (version >= 1.6.2-1) ;
- cron (version >= 3.0pl1-53) ou anacron ;
- mailx ;
- base-passwd (version >= 2.0.3.4)
- compression des logs à l’aide de la commande
« logrotate » dont le fichier de configuration
« /etc/logrotate.conf » est donné
ci-dessous :
#
# Emplacement : Maquette de test SGA
# Description : Fichier de configuration pour la compression des logs
# : Voir man logrotate pour plus de details
# Serveur : Hercule
# Copyright : marc.boget@gendarmerie.org
# Compression des logs chaque semaine
weekly
# Conservation des logs sur 4 périodes (soit 4 semaines)
rotate 4
# Creation de fichiers de logs vide après rotation
create
# Compression des logs au moment de la rotation
compress
# Répertoire contenant les directives particulières à certains logs
include /etc/logrotate.d
# Exemple de directives pouvant être incluses dans le rep. ci-dessus
# La directive missingok permet d’éviter la génération d’un log si le
# fichier de logs attendu n’existe pas !
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
- déport des logs vers le serveur « PetiteOurse »
à l’aide du démon syslog dont le fichier de configuration
/etc/syslog.conf est donné ci-dessous :
#
# Emplacement : Maquette de test SGA
# Description : Fichier de configuration du démon syslog
# : Voir man syslog.conf pour tous les details
# Serveur : Hercule
# Copyright : marc.boget@gendarmerie.org
# Deport des logs sur PetiteOurse
*.* @petiteourse
# Traitement par catégories d'evenements
# La colonne de gauche indique la catégorie
# La colonne de droite indique l'action à effectuer
# Le signe "-" devant certains fichiers de droite indique
# que le système n'est pas obligé de synchroniser son disque
# a chaque écriture (gain en vitesse mais perte d'informations
# en cas de crash serveur).
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
uucp.* /var/log/uucp.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
# Les événements de la catégorie emergency sont envoyés à tous
# les utilisateurs loggés
*.emerg *
#
# Exemple pour envoyer les logs sur un TTY particulier
#
#daemon,mail.*;\
# news.=crit;news.=err;news.=notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn /dev/tty8
# Pour envoyer les logs sur la console xconsole
# Peu utile sur un serveur sans serveur X !
# Attention : il faut invoquer xconsole avec l'option -file
# pour pouvoir avoir les logs : ex : xconsole -file /dev/xconsole [...]
daemon.*;mail.*;\
news.crit;news.err;news.notice;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
8.2.3.D - Firewall de paquets :
Le démon iptables (version 1.2.6a-5) s’installe à
l’aide de la commande suivante :
è apt-get install iptables
Il
dépend des packages suivants :
- libc6 (version >= 2.2.4-4),
- debconf (version >= 0.5)
Il est entièrement
paramétré à l’aide du script
« /etc/init.d/rc.firewall » lancé au démarrage
du serveur (il faut créer les liens symboliques Sxxfirewall et
Kxxfirewall dans le répertoire correspondant au niveau de
démarrage par défaut du serveur Linux, ici
« /etc/rc2.d/ ») :
#!/bin/bash
#
# Emplacement : Maquette de test SGA
# Description : Fichier de parametrage du firewall par paquets
# Serveur : Hercule
# Copyright : marc.boget@gendarmerie.org
#
# Definition des différentes interfaces du FW
#--------------------------------------------
interface_pub_externe=eth0
interface_externe=eth1
interface_reverse=eth2
interface_conf_externe=eth3
interface_esentry=eth4
# Définition des différents réseaux raccordés au FW
#--------------------------------------------
reseau_externe=192.168.0.0/24
reseau_pub_externe=10.1.2.0/24
reseau_conf_externe=10.1.1.0/24
reseau_esentry=10.1.3.0/24
reseau_interne=52.30.184.0/24
reseau_reverse=10.1.4.0/24
reseau_interco=10.1.6.0/24
# Définition des éléments clés du réseau
#--------------------------------------------
colombe=10.1.1.2
pegase=10.1.2.2
eridan=10.1.3.3
grandeourse=10.1.3.2
dauphin=52.30.184.1
fleche=10.1.4.2
petiteourse=10.1.4.3
routeur_internet=192.168.0.101
firewall_applicatif=10.1.6.2
honeypot=10.1.1.4
# Définition des éléments clés externe au réseau
#--------------------------------------------
serveur_ref_ntp1=$(host ntp.univ-lyon1.fr|grep address|cut -d' ' -f4)
serveur_ref_ntp2=$(host ntp.obspm.fr|grep address|cut -d' ' -f4)
serveur_ref_ntp3=$(host ntp.tuxfamily.net|grep address|cut -d' ' -f4)
serveur_ref_dns1=212.46.206.2
serveur_ref_dns2=194.2.0.20
serveur_ref_dns3=194.2.0.50
serveurs_maj_debian="security.debian.org debian.via.ecp.fr non-us.debian.org ftp.fr.debian.org"
# Définition des ports utilisés dans le cadre de la maquette
#--------------------------------------------
port_web=80
port_web_ssl=443
port_web_fullssl=4443
port_dns=53
port_ntp=123
port_ipsec=500
port_imap=143
port_imap_ssl=993
port_smtp=25
port_syslog=514
port_ldap=389
port_ldap_ssl=636
port_agent_esentry=1701
port_ssh=22
ports_tcp_windows="138 139 445"
ports_udp_windows="137 138 139"
case "$1" in
start)
#==================================
# PARTIE INITIALISATION
#--------------------------------------------
# -F: permet de vider toutes les regles d'une chaine
# -X: permet d'effacer une chaine
# -P: permet de spécifier au kernel la target par defaut d'une chaine
# PREROUTING : a l'arrivee du firewall
# POSTROUTING: a la sortie du firewall
#==================================
# On va utiliser iptable si on l'a compilé en module
# dans le kernel, il faut charger le module ip_tables
#--------------------------------------------
modprobe ip_tables
# On va charger quelques modules supplémentaires
# pour gérer la translation d'adresse
#--------------------------------------------
modprobe iptable_filter
modprobe iptable_nat
# Vidage des chaînes
#--------------------------------------------
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F
#Destruction des chaînes "personnelles"
#--------------------------------------------
iptables -X
# Définition d'une chaîne permettant de logguer puis de dropper
#--------------------------------------------------------------
iptables -N LOG_PUIS_DROP 2>/dev/null
iptables -F LOG_PUIS_DROP
iptables -A LOG_PUIS_DROP -j LOG --log-prefix="[FW Paquet rejete]: " #--log-level notice
iptables -A LOG_PUIS_DROP -j DROP
#Stratégie par défaut: DROP
#--------------------------------------------
#iptables -P INPUT DROP
#iptables -P FORWARD DROP
#iptables -P OUTPUT DROP
#==================================
# PARTIE DEFINITION
#==================================
# Toutes les connexions établies et relatives sont acceptées
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Autorise accès machine locale
#--------------------------------------------
iptables -A INPUT -i lo -p ALL -j ACCEPT
iptables -A OUTPUT -o lo -p ALL -j ACCEPT
# Autorise acces DNS des serveurs de la maquette
#--------------------------------------------
for serveur_ref_dns in $serveur_ref_dns1 $serveur_ref_dns2 $serveur_ref_dns3
do
iptables -A OUTPUT \
-p udp --destination-port $port_dns \
-d $serveur_ref_dns \
-o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_dns \
-s $reseau_pub_externe -d $serveur_ref_dns \
-i $interface_pub_externe -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_dns \
-s $reseau_conf_externe -d $serveur_ref_dns \
-i $interface_conf_externe -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_dns \
-s $reseau_esentry -d $serveur_ref_dns \
-i $interface_esentry -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_dns \
-s $reseau_interco -d $serveur_ref_dns \
-i $interface_reverse -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_dns \
-s $reseau_interne -d $serveur_ref_dns \
-i $interface_reverse -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_dns \
-s $reseau_reverse -d $serveur_ref_dns \
-i $interface_reverse -o $interface_externe \
-j ACCEPT
done
# Autorise acces WEB
#--------------------------------------------
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_externe -d $fleche \
-i $interface_externe -o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $firewall_applicatif -d $colombe \
-i $interface_reverse -o $interface_conf_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $firewall_applicatif -d $pegase \
-i $interface_reverse -o $interface_pub_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web_ssl \
-s $reseau_externe -d $eridan \
-i $interface_externe -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web_ssl \
-s $reseau_externe -d $fleche \
-i $interface_externe -o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web_ssl \
-s $fleche -d $eridan \
-i $interface_reverse -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web_ssl \
-s $fleche -d $colombe \
-i $interface_reverse -o $interface_conf_externe \
-j ACCEPT
# Autorise dialogue agents E-Sentry
#--------------------------------------------
iptables -A FORWARD \
-p tcp --destination-port $port_agent_esentry \
-s $fleche -d $eridan \
-i $interface_reverse -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_agent_esentry \
-s $colombe -d $eridan \
-i $interface_conf_externe -o $interface_esentry \
-j ACCEPT
# Autorise acces LDAPS pour authentification utilisateur
#--------------------------------------------
iptables -A OUTPUT \
-p tcp --destination-port $port_ldap_ssl \
-d $grandeourse \
-o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ldap_ssl \
-s $reseau_reverse -d $grandeourse \
-i $interface_reverse -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ldap_ssl \
-s $reseau_conf_externe -d $grandeourse \
-i $interface_conf_externe -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ldap_ssl \
-s $reseau_pub_externe -d $grandeourse \
-i $interface_pub_externe -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ldap_ssl \
-s $reseau_interne -d $grandeourse \
-i $interface_reverse -o $interface_esentry \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ldap_ssl \
-s $firewall_applicatif -d $grandeourse \
-i $interface_reverse -o $interface_esentry \
-j ACCEPT
# Autorise acces SYSLOG pour deport des logs
#--------------------------------------------
iptables -A OUTPUT \
-p udp --destination-port $port_syslog \
-d $petiteourse \
-o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_syslog \
-s $reseau_conf_externe -d $petiteourse \
-i $interface_conf_externe -o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_syslog \
-s $reseau_pub_externe -d $petiteourse \
-i $interface_pub_externe -o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p udp --destination-port $port_syslog \
-s $reseau_esentry -d $petiteourse \
-i $interface_esentry -o $interface_reverse \
-j ACCEPT
# Autorise acces NTP pour mise a l'heure des serveurs
#--------------------------------------------
for serveur_ref_ntp in $serveur_ref_ntp1 $serveur_ref_ntp2 $serveur_ref_ntp3
do
iptables -A OUTPUT \
-p udp --destination-port $port_ntp \
-d $serveur_ref_ntp \
-o $interface_externe \
-j ACCEPT
done
iptables -A INPUT \
-p udp --destination-port $port_ntp \
-s $reseau_esentry \
-i $interface_esentry \
-j ACCEPT
iptables -A INPUT \
-p udp --destination-port $port_ntp \
-s $reseau_reverse \
-i $interface_reverse \
-j ACCEPT
iptables -A INPUT \
-p udp --destination-port $port_ntp \
-s $reseau_conf_externe \
-i $interface_conf_externe \
-j ACCEPT
iptables -A INPUT \
-p udp --destination-port $port_ntp \
-s $reseau_pub_externe \
-i $interface_pub_externe \
-j ACCEPT
# Autorise transfert de messages entre serveurs
#--------------------------------------------
iptables -A FORWARD \
-p tcp --destination-port $port_smtp \
-s $pegase -d $dauphin \
-i $interface_pub_externe -o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_smtp \
-s $firewall_applicatif -d $pegase \
-i $interface_reverse -o $interface_pub_externe \
-j ACCEPT
# Autorise acces Messagerie pour les clients
#--------------------------------------------
iptables -A FORWARD \
-p tcp --destination-port $port_imap \
-s $reseau_externe -d $pegase \
-i $interface_externe -o $interface_pub_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_imap_ssl \
-s $reseau_externe -d $pegase \
-i $interface_externe -o $interface_pub_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_smtp \
-s $reseau_externe -d $pegase -o $interface_pub_externe \
-i $interface_externe \
-j ACCEPT
# Autorise MAJ des serveurs sur sites debian
#--------------------------------------------
for serveur_maj in $serveurs_maj_debian
do
iptables -A OUTPUT \
-p tcp --destination-port $port_web \
-d $serveur_maj \
-o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_reverse -d $serveur_maj \
-i $interface_reverse -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_pub_externe -d $serveur_maj \
-i $interface_pub_externe -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_conf_externe -d $serveur_maj \
-i $interface_conf_externe -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_esentry -d $serveur_maj \
-i $interface_esentry -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_interco -d $serveur_maj \
-i $interface_reverse -o $interface_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_web \
-s $reseau_interne -d $serveur_maj \
-i $interface_reverse -o $interface_externe \
-j ACCEPT
done
# Autorise acces Webmail pour les clients
#--------------------------------------------
iptables -A FORWARD \
-p tcp --destination-port $port_web_ssl \
-s $reseau_externe -d $dauphin \
-i $interface_externe -o $interface_reverse \
-j ACCEPT
# Autorise administration SSH des serveurs
#--------------------------------------------
iptables -A INPUT \
-p tcp --destination-port $port_ssh \
-j ACCEPT
iptables -A OUTPUT \
-p tcp --destination-port $port_ssh \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ssh \
-d $reseau_conf_externe \
-o $interface_conf_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ssh \
-d $reseau_pub_externe \
-o $interface_pub_externe \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ssh \
-d $reseau_reverse \
-o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ssh \
-d $reseau_interne \
-o $interface_reverse \
-j ACCEPT
iptables -A FORWARD \
-p tcp --destination-port $port_ssh \
-d $reseau_esentry \
-o $interface_esentry \
-j ACCEPT
# Autorise acces Windows avec controleur SAMBA
#--------------------------------------------
for port_tcp_windows in $ports_tcp_windows
do
iptables -A FORWARD \
-p tcp --destination-port $port_tcp_windows \
-d $colombe \
-o $interface_conf_externe \
-j ACCEPT
done
for port_tcp_windows in $ports_tcp_windows
do
iptables -A FORWARD \
-p tcp --source-port $port_tcp_windows \
-s $colombe \
-i $interface_conf_externe \
-j ACCEPT
done
for port_udp_windows in $ports_udp_windows
do
iptables -A FORWARD \
-p udp --source-port $port_udp_windows \
-d $colombe \
-o $interface_conf_externe \
-j ACCEPT
done
for port_udp_windows in $ports_udp_windows
do
iptables -A FORWARD \
-p udp --destination-port $port_udp_windows \
-s $colombe \
-i $interface_conf_externe \
-j ACCEPT
done
# Autorise tout acces sur honeyPot
#--------------------------------------------
iptables -A FORWARD \
-d $honeypot \
-o $interface_conf_externe \
-j ACCEPT
# Mise en place du masquage d'adresse pour les adresses internes
#----------------------------------------------------------------
iptables -t nat -A POSTROUTING -s $reseau_interne -o $interface_externe -j MASQUERADE
iptables -t nat -A POSTROUTING -s $reseau_interco -o $interface_externe -j MASQUERADE
iptables -t nat -A POSTROUTING -s $reseau_reverse -o $interface_externe -j MASQUERADE
iptables -t nat -A POSTROUTING -s $reseau_esentry -o $interface_externe -j MASQUERADE
iptables -t nat -A POSTROUTING -s $reseau_conf_externe -o $interface_externe -j MASQUERADE
iptables -t nat -A POSTROUTING -s $reseau_pub_externe -o $interface_externe -j MASQUERADE
# Autorise le ping
#--------------------------------------------
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
# Log ce qui a ete refuse
#--------------------------------------------
iptables -A INPUT -j LOG_PUIS_DROP
iptables -A OUTPUT -j LOG_PUIS_DROP
iptables -A FORWARD -j LOG_PUIS_DROP
# Mise en place du routage du noyau
#--------------------------------------------
echo "1" > /proc/sys/net/ipv4/ip_forward
# Mise en place des routes
#--------------------------------------------
route add default gw $routeur_internet >/dev/null 2>&1
route add -net $reseau_interne gw $firewall_applicatif >/dev/null 2>&1
route add -net $reseau_reverse gw $firewall_applicatif >/dev/null 2>&1
# Affiche l'etat des regles
#--------------------------------------------
echo ">Etat des regles du FW"
iptables -L
echo ">"
;;
stop)
# Vidage des chaînes
#--------------------------------------------
iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F
#Destruction des chaînes "personnelles"
#--------------------------------------------
iptables -X
# Ouverture du firewall
#----------------------
iptables -A INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -A FORWARD -j ACCEPT
# Mise en place des routes
#--------------------------------------------
route add default gw $routeur_internet >/dev/null 2>&1
route add -net $reseau_interne gw $firewall_applicatif >/dev/null 2>&1
route add -net $erseau_reverse gw $firewall_applicatif >/dev/null 2>&1
;;
*)
echo "Usage: /etc/init.d/rc.firewall {start|stop}"
exit 1
esac
exit 0
8.2.3.E - Serveur SSH :
Le serveur SSH (version 1:3.4p1-0.0woody1) s’installe de la
manière suivante :
è apt-get install ssh
Ce
package dépend des packages suivants :
- libpam0g (version >= 0.72-1) ;
- libc6 (version >= 2.2.4-4) ;
- libssl0.9.6 ;
- libwrap0 ;
- zlib1g (version >= 1:1.1.4) ;
- libpam-modules (version >= 0.72-9) ;
- debconf ;
- adduser.
L’ensemble des serveurs SSH des
différents serveurs de la maquette est configuré de la
manière suivante :
- mise en place d’un serveur SSH en cage écoutant sur le port
2222 ;
- mise en place d’un serveur SSH non encagé écoutant sur
le port 22 mais n’acceptant des connexions que depuis le serveur
local.
Cette configuration est mise en place en modifiant le
fichier « /etc/init.d/ssh » de la manière
indiquée ci-dessous :
...
start)
...
echo -n "Starting OpenBSD Secure Shell server: sshd on port 22"
start-stop-daemon --start --quiet --pidfile /var/run/sshd.pid --exec /usr/sbin/sshd
echo "."
echo -n "Starting OpenBSD Secure Shell server: sshd on port 2222"
chroot /cages/ssh usr/sbin/sshd -p 2222
...
et en paramétrant les fichiers de configuration des
serveurs SSH « /etc/ssh/sshd_config » de la manière
suivante :
è Fichier /etc/ssh/sshd_config : ListenAddress 127.0.0.1
è Fichier /cages/ssh/etc/sshd_config : ListenAddress 0.0.0.0
8.2.3.F - Mise en places des adresses ARP
statiques :
De manière à éviter l’ARP Poisoning, chaque
serveur se voit doter d’un fichier de définition des adresses ARP.
Le fichier suivant est implémenté sur chaque serveur à
l’aide de la commande « arp -s -f
nom_fichier » :
10.1.1.1 00:02:B3:CD:F9:FA
10.1.1.2 00:10:B5:F0:75:A9
10.1.1.4 00:03:BA:06:10:3D
10.1.2.1 00:02:B3:CD:F9:67
10.1.2.2 00:02:55:5B:EF:7F
10.1.3.1 00:80:5F:05:25:E5
10.1.3.2 00:02:B3:CD:F9:6A
10.1.3.3 00:10:B5:F0:99:70
10.1.4.1 00:80:5F:26:E2:3C
10.1.4.2 00:04:AC:13:DC:B2
10.1.4.3 00:08:C7:FA:A9:A8
10.1.4.4 00:80:5F:F7:DC:24
10.1.4.5 00:10:B5:B9:2C:0C
10.1.6.1 00:02:B3:CD:F9:6C
10.1.6.2 00:10:4B:65:71:CB
192.168.0.1 00:02:B3:CD:F8:9B
192.168.0.7 00:09:6B:51:69:4F
192.168.0.8 00:09:6B:51:5E:3E
192.168.0.9 00:00:39:6C:E0:8C
192.168.0.101 00:20:6F:0D:65:34
8.2.3.G - Authentification des utilisateurs sur
l’annuaire LDAP :
Le paramétrage de l’authentification des utilisateurs sur
l’annuaire GrandeOurse est décrit au paragraphe
8.2.6.D - .